#ifndef __BST__
#define __BST__

struct sBstNode {
    int key;
    struct sBstNode* left;
    struct sBstNode* right;    
}

typedef struct sBstNode Bst_t;


Bst_t* insert(Bst_t *root, int key);
Bst_t* search(Bst_t *root, int key);
Bst_t* deleteNode(Bst_t *root, int key);
Bst_t* leftmost(Bst_t *root);
Bst_t* rightmost(Bst_t *root);
Bst_t* getPred(Bst_t * root, int target);
Bst_t* getSucc(Bst_t* root, int target);
#endif